home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / FREQ.TST / EXECKOSM.C < prev    next >
C/C++ Source or Header  |  1995-12-14  |  3KB  |  74 lines

  1. /* ============ */
  2. /* execkosm.c    */
  3. /* ============ */
  4. #include <mconf.h>
  5. #include <miscdefs.h>
  6. #include <freqdefs.h>
  7. /* ==================================================================== */
  8. /* ExecKolSmirTest - Performs K-S on K-S Test on Runs of Random Numbers    */
  9. /* ==================================================================== */
  10. void
  11. ExecKolSmirTest(KS_DATA_STRU *KSData)
  12. {
  13.     int     i;
  14.     double  NegProbAry[MAX_KS_RUNS], PosProbAry[MAX_KS_RUNS];
  15.     double  KnMinusProb, KnMinusStat, KnPlusProb, KnPlusStat;
  16.  
  17.     /* ---------------------------------- */
  18.     /* Set Run Controls from User Inputs. */
  19.     /* ---------------------------------- */
  20.     SetKoSmControls(KSData);
  21.  
  22.     /* ------------------------ */
  23.     /* Initialize Variate Count */
  24.     /* ------------------------ */
  25.     KSData->TotNumGen = 0;
  26.  
  27.     /* ----------------------------- */
  28.     /* Gather Data for KS-on-KS Test */
  29.     /* ----------------------------- */
  30.     fflush(NULL);
  31.     for (i = 0; i < KSData->NumKSRuns; ++i)
  32.     {
  33.     KSFreq(KSData);
  34.  
  35.     PosProbAry[i] = KSData->KnPlusProb;
  36.     NegProbAry[i] = KSData->KnMinusProb;
  37.  
  38.     fprintf(stderr, "\rPass %3d (of %d), %8ld  Total Random Numbers",
  39.         i+1, KSData->NumKSRuns, KSData->TotNumGen);
  40.     }
  41.  
  42.     fprintf(stderr, "\n"); fflush(NULL);
  43.     /* ---------------------------------------------- */
  44.     /* Calculate Statistics and Probabilities for Kn+ */
  45.     /* ---------------------------------------------- */
  46.     KSCalc(PosProbAry, KSData->NumKSRuns, &KnPlusStat, &KnPlusProb,
  47.     &KnMinusStat, &KnMinusProb);
  48.  
  49.     printf("\nStatistics and Probabilities for Kn+\n");
  50.  
  51.     printf("\tK(%d)+ = %f (Knuth) or %9f%%\n", KSData->NumKSRuns,
  52.     sqrt((double)KSData->NumKSRuns)*KnPlusStat, 100*KnPlusProb);
  53.  
  54.     printf("\tK(%d)- = %f (Knuth) or %9f%%\n", KSData->NumKSRuns,
  55.     sqrt((double)KSData->NumKSRuns)*KnMinusStat, 100*KnMinusProb);
  56.  
  57.     /* ---------------------------------------------- */
  58.     /* Calculate Statistics and Probabilities for Kn- */
  59.     /* ---------------------------------------------- */
  60.     KSCalc(NegProbAry, KSData->NumKSRuns, &KnPlusStat, &KnPlusProb,
  61.     &KnMinusStat, &KnMinusProb);
  62.  
  63.     printf("\nStatistics and Probabilities for Kn-\n");
  64.  
  65.     printf("\tK(%d)+ = %f (Knuth) or %9f%%\n", KSData->NumKSRuns,
  66.     sqrt((double)KSData->NumKSRuns)*KnPlusStat, 100*KnPlusProb);
  67.  
  68.     printf("\tK(%d)- = %f (Knuth) or %9f%%\n", KSData->NumKSRuns,
  69.     sqrt((double)KSData->NumKSRuns)*KnMinusStat, 100*KnMinusProb);
  70.  
  71.     printf("\nThis Run Required %ld Random Numbers\n\n",
  72.     KSData->TotNumGen);
  73. }
  74.